/*
 * ladrc.h
 *
 *  Created: 20250605
 *  Author: Hecate
 */

#ifndef CODE_LADRC_H_
#define CODE_LADRC_H_

// 跟踪微分器对象句柄
typedef struct TrackingDifferentiator TrackingDifferentiator;
// LADRC 控制器句柄
typedef struct LADRC LADRC;

// 初始化跟踪微分器参数
TrackingDifferentiator *trackingDifferentiatorInit(float r, float h, float n);

// 输入目标信号并更新微分器状态
void trackingDifferentiatorProcess(TrackingDifferentiator *obj, float v);

// 获取跟踪微分器的位置信号
float trackingDifferentiatorGetX1(const TrackingDifferentiator *obj);
// 获取跟踪微分器的速度信号
float trackingDifferentiatorGetX2(const TrackingDifferentiator *obj);

// 初始化 LADRC 控制器参数
LADRC *ladrcInit(float target, float r, float h, float n, float omega, float delta, float b, float kp, float kd);

// 更新控制器目标值
void ladrcSetTarget(LADRC *obj, float target);

// 输入最新测量值并计算控制输出
void ladrcProcess(LADRC *obj, float y);

// 获取当前控制输出
float ladrcGetControlValue(const LADRC *obj);

#endif /* CODE_LADRC_H_ */
